package user

import (
	"go-init/dao"
	"go-init/lib/ctx"
	"go-init/lib/log"
	"go-init/lib/tool"
	"go-init/srv"

	"github.com/gin-gonic/gin"
	jsoniter "github.com/json-iterator/go"
)

// UserNavGet
// @tags user
// @Summary 根据id获取user_nav信息
// @Description 根据id获取user_nav信息
// @Accept  json
// @Produce  json
// @Param id query string true "user_navid"
// @Success 200 {object} dao.UserNav
// @Failure 400 {object} ctx.R
// @Router /api/user/user_nav_get [get]
func (u *USER) UserNavGet(c *ctx.Context) {
	qs := dao.NewQs()
	qs.Add("a.id=?", c.Query("id"))
	data, err := dao.UserNavo(qs)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	c.JSON(200, data)
}

// UserNavGets
// @tags user
// @Summary 获取user_nav列表
// @Description 获取user_nav列表
// @Accept  json
// @Produce  json
// @Success 200 {array} dao.UserNav
// @Failure 400 {object} ctx.R
// @Router /api/user/user_nav_gets [get]
func (u *USER) UserNavGets(c *ctx.Context) {
	data, err := srv.UserNavsAll("", "", 1, 0)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	c.JSON(200, data)
}

// UserNavSave
// @tags user
// @Summary 添加或更新user_nav
// @Description 添加或更新user_nav
// @Accept  x-www-form-urlencoded
// @Produce  json
// @Param document body dao.UserNav true "user_nav信息"
// @Success 200 {array} ctx.R "结果"
// @Router /api/user/user_nav_save [post]
func (u *USER) UserNavSave(c *ctx.Context) {
	var pd dao.UserNav
	data := c.PostForm("data")
	err := jsoniter.Unmarshal([]byte(data), &pd)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	tool.SetDCM(&pd)
	id, err := dao.InsertOrUpdate(&pd)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	c.JSON(200, ctx.R{Status: 1, Data: id})
}

// UserNavAuthGet
// @tags user
// @Summary 根据id获取user_nav_auth信息
// @Description 根据id获取user_nav_auth信息
// @Accept  json
// @Produce  json
// @Param id query string true "user_nav_authid"
// @Success 200 {object} dao.UserNavAuth
// @Failure 400 {object} ctx.R
// @Router /api/user/user_nav_auth_get [get]
func (u *USER) UserNavAuthGet(c *ctx.Context) {
	qs := dao.NewQs()
	qs.Add("a.id=?", c.Query("id"))
	data, err := dao.UserNavAutho(qs)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	c.JSON(200, data)
}

// UserNavAuthGets
// @tags user
// @Summary 获取user_nav_auth列表
// @Description 获取user_nav_auth列表
// @Accept  json
// @Produce  json
// @Success 200 {array} dao.UserNavAuth
// @Failure 400 {object} ctx.R
// @Router /api/user/user_nav_auth_gets [get]
func (u *USER) UserNavAuthGets(c *ctx.Context) {
	other := c.PageHandle()
	qs := dao.NewQs()
	data, err := dao.UserNavAuths(qs, other)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	c.JSON(200, gin.H{"data": data, "totalCount": dao.Count("user_nav_auth", qs)})
}

// UserNavAuthSave
// @tags user
// @Summary 添加或更新user_nav_auth
// @Description 添加或更新user_nav_auth
// @Accept  x-www-form-urlencoded
// @Produce  json
// @Param document body dao.UserNavAuth true "user_nav_auth信息"
// @Success 200 {array} ctx.R "结果"
// @Router /api/user/user_nav_auth_save [post]
func (u *USER) UserNavAuthSave(c *ctx.Context) {
	var pd dao.UserNavAuth
	data := c.PostForm("data")
	err := jsoniter.Unmarshal([]byte(data), &pd)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	tool.SetDCM(&pd)
	id, err := dao.InsertOrUpdate(&pd)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	c.JSON(200, ctx.R{Status: 1, Data: id})
}

// UserRoleGet
// @tags user
// @Summary 根据id获取user_role信息
// @Description 根据id获取user_role信息
// @Accept  json
// @Produce  json
// @Param id query string true "user_roleid"
// @Success 200 {object} dao.UserRole
// @Failure 400 {object} ctx.R
// @Router /api/user/user_role_get [get]
func (u *USER) UserRoleGet(c *ctx.Context) {
	qs := dao.NewQs()
	qs.Add("a.id=?", c.Query("id"))
	data, err := dao.UserRoleo(qs)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	c.JSON(200, data)
}

// UserRoleGets
// @tags user
// @Summary 获取user_role列表
// @Description 获取user_role列表
// @Accept  json
// @Produce  json
// @Success 200 {array} dao.UserRole
// @Failure 400 {object} ctx.R
// @Router /api/user/user_role_gets [get]
func (u *USER) UserRoleGets(c *ctx.Context) {
	other := c.PageHandle()
	qs := dao.NewQs()
	data, err := dao.UserRoles(qs, other)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	c.JSON(200, gin.H{"data": data, "totalCount": dao.Count("user_role", qs)})
}

// UserRoleSave
// @tags user
// @Summary 添加或更新user_role
// @Description 添加或更新user_role
// @Accept  x-www-form-urlencoded
// @Produce  json
// @Param document body dao.UserRole true "user_role信息"
// @Success 200 {array} ctx.R "结果"
// @Router /api/user/user_role_save [post]
func (u *USER) UserRoleSave(c *ctx.Context) {
	userid := c.GetUID()
	var pd dao.UserRole
	data := c.PostForm("data")
	err := jsoniter.Unmarshal([]byte(data), &pd)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	var opd dao.UserRole
	if pd.Id != 0 {
		qs := dao.NewQs()
		qs.Add("a.id=?", pd.Id)
		opd, err = dao.UserRoleo(qs)
		if err != nil {
			log.Error(err)
		}
	}
	tool.SetDCM(&pd)
	id, err := dao.InsertOrUpdate(&pd)
	if c.HandlerError(err) {
		log.Error(err)
		return
	}
	pd.Id = int(id)
	_ = srv.InsertOperateRecordSimple(opd, pd, userid)
	c.JSON(200, ctx.R{Status: 1, Data: id})
}
